namespace OasisCiq.Xnal
{
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using CommonTypes;
    using External;
    using Xal;
    using Xnl;
    using XS;

    /// <summary>
    /// This is a generic contianer to combine name and address.
    /// Any cardinality of names and addresses is permitted.
    /// </summary>
    public class Record : IDataQualityGroup, IValidityDateGroup, ILanguageCodeGroup, IExtendedAttributes
    {
        /// <summary>
        /// at least ane element required
        /// </summary>
        public ICollection<PartyNameType> PartyNames { get; set; }

        /// <summary>
        /// at least ane element required
        /// </summary>
        public ICollection<AddressType> Addresses { get; set; }

        /// <summary>
        /// A unique identifier of a record
        /// </summary>
        public CTString RecordId { get; set; }

        /// <summary>
        /// Type of Record ID
        /// </summary>
        public RecordIdTypeList RecordIdType { get; set; }

        /// <summary>
        /// Status of the entity. e.g. Old, Current, Inactive, Active, etc
        /// </summary>
        public StatusList Status { get; set; }

        public XSDateTime DateValidFrom { get; set; }

        public XSDateTime DateValidTo { get; set; }

        public CTString RecordKey { get; set; }

        public CTString RecordKeyRef { get; set; }

        public DataQualityTypeList DataQualityType { get; set; }

        public XSDateTime ValidFrom { get; set; }

        public XSDateTime ValidTo { get; set; }

        public XSLanguage LanguageCode { get; set; }

        public NameValueCollection ExtendedAttributes { get; set; }
    }
}